Programmable logic devices (PLDs) exist as a well-known type of integrated circuit (IC) that may be programmed by a user to perform specified logic functions. There are different types of programmable logic devices, such as programmable logic arrays (PLAs) and complex programmable logic devices (CPLDs). One type of programmable logic device, known as a field programmable gate array (FPGA), is very popular because of a superior combination of capacity, flexibility, time-to-market, and cost.
An FPGA typically includes an array of configurable logic blocks (CLBs) surrounded by a ring of programmable input/output blocks (IOBs). The CLBs and IOBs are interconnected by a programmable interconnect structure. The CLBs, IOBs, and interconnect structure are typically programmed by loading a stream of configuration data (known as a bitstream) into internal configuration memory cells that define how the CLBs, IOBs, and interconnect structure are configured. An FPGA may also include various dedicated logic circuits, such as memories, microprocessors, digital clock managers (DCMs), and input/output (I/O) transceivers.
Notably, an FPGA having embedded processor or controller circuitry is referred to as a system-on-chip (SoC). An SoC is a fully functional product having its electronic circuitry contained on a single chip. An SoC typically includes all the required ancillary hardware components to facilitate operation of the embedded processor or controller circuitry. For example, an SoC for a cellular telephone may include a microprocessor, an encoder, a decoder, a digital signal processor (DSP), random access memory (RAM), read only memory (ROM), and the like. An SoC also includes various software components, such as device drivers, operating systems (OSs), and the like.
Designers typically develop embedded systems for an FPGA using electronic design automation (EDA) software. A designer builds an embedded system using electronic descriptions of various hardware and software components. Such electronic descriptions are referred to as intellectual property (IP) libraries or IP cores. Presently, IP libraries are either pure software libraries that are meant to be linked against and used for implementation on a microprocessor, or pure hardware cores that implement themselves in FPGA fabric.
In some cases, it may be desirable to provide a software library where one or more functions are implemented using hardware. It is also desirable to make the implementation of the hardware functions transparent to the user. Accordingly, there exists a need in the art for a method and apparatus that provides self-implementing hardware-software libraries.